package com.arpa.wms.service;

import com.arpa.wms.domain.dto.ExpenseDetailSettlementDTO;
import com.arpa.wms.domain.dto.ReceiptDTO;
import com.arpa.wms.domain.dto.ReceiptEditDTO;
import com.arpa.wms.domain.entity.Receipt;
import com.arpa.wms.domain.vo.ReceiptVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 仓库收款单 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-11-17
 */
public interface IReceiptService extends IService<Receipt> {


    @Transactional(rollbackFor={Exception.class})
    boolean save(List<Receipt> receipts);

    /**
     * 根据code更新实体
     * @param entity 结算单
     * @param removeItemCodes 删除的明细code
     * @return
     */
    int updateByCode(Receipt entity,List<String> removeItemCodes);

    /**
     * 查询列表
     * @param receiptDTO
     * @return
     */
    List<ReceiptVO> queryList(ReceiptDTO receiptDTO);

    /**
     * 查询合计,包含总数
     * @param receiptDTO
     * @return
     */
    ReceiptVO queryListSum(ReceiptDTO receiptDTO);

    /**
     * 删除收款单
     * 删除收款单的同时，更新收费明细状态
     * @param code
     */
    void removeByCode(String code);




    /**
     * 生成结算单
     * @param codes 费用明细code
     */
    void settlement(ExpenseDetailSettlementDTO codes);

    /**
     * 更新结算单
     * 关联更改费用明细
     * @param entity
     * @return
     */
    int update(ReceiptEditDTO entity);

    /**
     * 收款单审核
     * @param code 收款单code
     * @param status 审核状态 1：通过。2不通过
     * @param status 审核意见
     * @return
     */
    boolean approve(String code, int status,String verifyOpinion);


    /**
     * 收款单信息
     * @param code 收款单号
     * @return {@link ReceiptVO}
     */
    ReceiptVO getReceipt(String code);
}
